import { getAccessToken } from '@/utils/auth'
import store from '@/store'

// 白名单路由
const whiteList = ['/pages/login/index', '/pages/register/index', '/pages/forgot/index', '/pages/contract/agreement?type=register_agreement', '/pages/contract/agreement?type=privacy_agreement']
    // 认证白名单路由（已登录但未认证也可访问的页面）
const authWhiteList = [...whiteList, '/pages/user/verification/index', '/pages/user/settings/index', '/pages/user/index', '/pages/contract/agreement']

// 路由守卫
function hasPermission(url) {
    // 在白名单中直接通过
    if (whiteList.indexOf(url) !== -1) {
        console.log('----------------------')
        return true
    }

    // 判断是否有token
    if (getAccessToken()) {
        console.log('+++++++++++++++++++')
        if (url === '/pages/login/index') {
            console.log('@@@@@@@@@@@@@@@@@@')
                // 已登录且要跳转的页面是登录页，则跳转到首页
            uni.reLaunch({
                url: '/pages/home/index'
            })
            return false
        } else {
            console.log('!!!!!!!!!!!!!!!!')
                // 检查用户是否已认证
            const userInfo = store.state.user.userInfo

            // 如果用户信息为空，先获取用户信息
            if (!userInfo || !userInfo.id) {
                store.dispatch('GetUserInfo').then(res => {
                    // 获取用户信息成功后，检查认证状态
                    checkAuthStatus(url)
                }).catch(() => {
                    // 获取用户信息失败，可能是token过期，跳转到登录页
                    uni.reLaunch({
                        url: '/pages/login/index'
                    })
                })
                return true
            }

            return checkAuthStatus(url)
        }
    } else {
        console.log('#################', url, whiteList)
            // 没有token
        if (whiteList.indexOf(url) !== -1) {
            console.log('&&&&&&&&&&&&&')
                // 在免登录白名单，直接进入
            return true
        } else {

            console.log('******************')
                // 否则全部重定向到登录页
            uni.reLaunch({
                url: '/pages/login/index'
            })
            return false
        }
    }
}

// 检查用户认证状态
function checkAuthStatus(url) {
    const userInfo = store.state.user.userInfo

    // 如果用户未认证且访问的不是认证白名单中的页面，则跳转到认证页面
    // 使用auth字段判断认证状态，auth=1表示已认证
    if (userInfo.auth !== 1 && authWhiteList.indexOf(url) === -1) {
        uni.navigateTo({
            url: '/pages/user/verification/index'
        })
        return false
    }

    return true
}

// 页面跳转守卫
uni.addInterceptor('navigateTo', {
    invoke(e) {
        return hasPermission(e.url)
    }
})

uni.addInterceptor('redirectTo', {
    invoke(e) {
        return hasPermission(e.url)
    }
})

uni.addInterceptor('reLaunch', {
    invoke(e) {
        return hasPermission(e.url)
    }
})

uni.addInterceptor('switchTab', {
    invoke(e) {
        return hasPermission(e.url)
    }
})